# 原理：在__new__里面只执行super().__new__(cls)一次

class A():
    # 1.定义一个类属性记录对象的引用，初始值为None
    isN = None
    # 2.重写__new__
    def __new__(cls, *args, **kwargs):
        # 2.1在执行第3步之前先判断 判断类属性是否为None
        if cls.isN == None:
            # 3.开辟空间 给类属性重新赋值
            cls.isN = super().__new__(cls)
        return cls.isN  # 4.返回对象的引用 第一次开辟内存空间的地址
a1 = A()
print(a1)
a2 = A()
print(a2)
a3 = A()
print(a3)
# 保证了只开辟了一块内存空间，减少了资源的浪费